/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package videogest;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

import persistencia.persistenciaPelicula;

/**
 *
 * @author JAVA
 */
public class Pelicula extends Producto {

    String director;
    float Duracion;
    List<String> actores;
    List<String> contenidosExtras;
    List<String> formatoAudio;
    Tipo tipo;

    public Pelicula(String nombre, String sinopsis, String genero, Clasificacion precioAlquiler, float precioVenta, String director,
            float Duracion, List<String> actores, List<String> contenidosExtras, List<String> formatoAudio, Tipo tipo) throws FileNotFoundException, IOException {
        super(Codigo.Pelicula, nombre, sinopsis, genero, precioAlquiler, precioVenta);
        this.contenidosExtras = contenidosExtras;
        this.formatoAudio = formatoAudio;
        this.tipo = tipo;
        this.Duracion = Duracion;
        this.director = director;
        this.actores = actores;
        this.formatoAudio = formatoAudio;
        this.tipo = tipo;
    }

    public Pelicula(String codigo, String nombre, String sinopsis, String genero, Clasificacion precioAlquiler, float precioVenta, String director,
            float Duracion, List<String> actores, List<String> contenidosExtras, List<String> formatoAudio, Tipo tipo, boolean baja, boolean alquilado, Date estreno) throws FileNotFoundException, IOException {
        super(codigo, nombre, sinopsis, genero, precioAlquiler, precioVenta, baja, alquilado, estreno);
        this.contenidosExtras = contenidosExtras;
        this.formatoAudio = formatoAudio;
        this.tipo = tipo;
        this.Duracion = Duracion;
        this.director = director;
        this.actores = actores;
        this.formatoAudio = formatoAudio;
        this.tipo = tipo;
    }

    public float getDuracion() {
        return Duracion;
    }

    public void setDuracion(float Duracion) {
        this.Duracion = Duracion;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public Tipo getTipo() {
        return tipo;
    }

    public void setTipo(Tipo tipo) {
        this.tipo = tipo;
    }

    public List<String> getActores() {
        return actores;
    }

    public void setActores(List<String> actores) {
        this.actores = actores;
    }

    public Clasificacion getPrecioAlquiler() {
        return precioAlquiler;
    }

    public void setPrecioAlquiler(Clasificacion precioAlquiler) {
        this.precioAlquiler = precioAlquiler;
    }

    public List<String> getContenidosExtras() {
        return contenidosExtras;
    }

    public void setContenidosExtras(List<String> contenidosExtras) {
        this.contenidosExtras = contenidosExtras;
    }

    public List<String> getFormatoAudio() {
        return formatoAudio;
    }

    public void setFormatoAudio(List<String> formatoAudio) {
        this.formatoAudio = formatoAudio;
    }

    //  Devuelvo una pelicula
    public static Pelicula damePelicula(String codigo) throws IOException, ParseException {

        return persistenciaPelicula.damePelicula(codigo);
    }

//ENUMERADO tipo.DVD, tipo.BlueRay,private String tipo;
//Sobreescribimos el toString para mostrar las peliculas tal y como queremos
    @Override
    public String toString() {
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

        String ret = "\n";
        try {
            ret += "================================================\n";
            ret += "|           DATOS DE LA PELICULA\n";
            ret += "================================================\n";
            ret += "|-- Codigo: " + super.getCodigo() + "\n";
            ret += "|-- Nombre: " + super.getNombre() + "\n";
            ret += "|-- Sinopsis: " + super.getSinopsis() + "\n";
            ret += "|-- Genero: " + super.getGenero() + "\n";
            ret += "|-- PrecioAlquiler: " + this.getPrecioAlquiler().getClasificacion() + "\n";
            ret += "|-- PrecioVenta: " + super.getPrecioVenta() + "\n";
            ret += "|-- Director: " + this.getDirector() + "\n";
            ret += "|-- Duracion: " + this.getDuracion() + "\n";
            ret += "|-- Formato Audio: " + this.getFormatoAudio() + "\n";
            ret += "|-- Actores: " + this.getActores() + "\n";
            ret += "|-- Contenidos extras: " + this.getContenidosExtras() + "\n";
            ret += "|-- Tipo: " + this.getTipo() + "\n";
            ret += "|-- Baja: " + super.isBaja() + "\n";
            ret += "|-- Alquilado: " + this.isAlquilado() + "\n";
            ret += "|-- Estreno: " + df.format(this.getEstreno()) + "\n";
            ret += "================================================\n";
        } catch (Exception e) {
            ret = "La pelicula que busca no existe en nuestro videoclub";
        }

        return ret;


    }
    //m�todo para crear una pelicula en la base de datoss!

    @Override
    public void alta() {

        persistenciaPelicula.alta(this);
   }

    @Override
    public void modificar() {

        persistenciaPelicula.modificar(this);
        

    }

    //Dos Videojuegos seran iguales cuando tienen el mismo c�digo
    @Override
    public boolean equals(Object o) {
        boolean res = false;


        if (o instanceof Pelicula) {
            Pelicula p = (Pelicula) o;


            if (this.getCodigo() == (p.getCodigo())) {
                res = true;


            }
        }
        return res;


    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 13 * hash + (this.director != null ? this.director.hashCode() : 0);
        hash = 13 * hash + Float.floatToIntBits(this.Duracion);
        hash = 13 * hash + (this.actores != null ? this.actores.hashCode() : 0);
        hash = 13 * hash + (this.contenidosExtras != null ? this.contenidosExtras.hashCode() : 0);
        hash = 13 * hash + (this.formatoAudio != null ? this.formatoAudio.hashCode() : 0);
        hash = 13 * hash + (this.tipo != null ? this.tipo.hashCode() : 0);



        return hash;

    }

    @Override
    public Producto dameProducto(String codigo) {
        Pelicula pelicula = null;
        try {
            pelicula = persistenciaPelicula.damePelicula(codigo);
        } catch (ParseException ex) {
            Logger.getLogger(Pelicula.class.getName()).log(Level.SEVERE, null, ex);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Pelicula.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Pelicula.class.getName()).log(Level.SEVERE, null, ex);
        }

        return pelicula;
    }
    //Sobreescribimos el hashCode que es necesario para tener el equals
}
